/*
 * ODO: Real-Time In-Memory ORM/DBMS Grid software
 * Copyright (c) 2008, Michael Oksenenko
 * All rights reserved.
 */
#ifndef ODO_FACTORY_HPP
#define ODO_FACTORY_HPP

#include "OsConfig.hpp"
#include "OdoProgramIF.hpp"

#include <memory>

namespace odo {

class ODO_API OdoFactory {

private: // aux

	template<class PROGRAM>
	static std::auto_ptr<OdoProgramIF> getProgram() {
		return std::auto_ptr<OdoProgramIF>(new PROGRAM());
	}

public: // iface

	static std::auto_ptr<OdoProgramIF> getDaemonAdmin();
	static std::auto_ptr<OdoProgramIF> getExport();
	static std::auto_ptr<OdoProgramIF> getImport();
	static std::auto_ptr<OdoProgramIF> getInstall();
	static std::auto_ptr<OdoProgramIF> getIsql();

public: // factory

	~OdoFactory();
	OdoFactory();

};

}

#endif /* ODO_FACTORY_HPP */
